The present invention is related to video data storage. More particularly, the present invention is related to video display systems and frame buffers. Several related technologies are discussed below (in labeled sections for clarity).
1. Raster Scan Displays
A common type of graphics monitor is a conventional raster-scan display using a cathode ray tube (xe2x80x9cCRTxe2x80x9d). As is well known, in a typical CRT, an electron beam strikes phosphor on the inner surface of the screen producing light visible on the outer surface of the screen. By controlling the electron beam different locations of the screen can be struck, creating a pattern and hence a video image. In a typical CRT raster-scan display, the screen area is divided into a grid of pixels (or picture elements). The electron beam sweeps from left to right across the screen, one row at a time from top to bottom, progressively drawing each pixel on the screen. Each row of pixels is commonly referred to as a scan line. In this type of conventional display, the scan lines are horizontal. The number of pixels in a single scan line is referred to as the width. One complete pass over the screen and the pixels in that pass are commonly referred to as a frame. As the electron beam moves across the pixels of each scan line, the beam intensity can be adjusted to vary the light produced by the screen phosphor corresponding to the pixels. The light emitted by the phosphor of the pixels creates a pattern of illuminated spots forming the video image. The intensity of the electron beam is controlled by image data stored in a section of memory called the frame buffer or refresh buffer.
2. Grating Light Valves
Another type of display system uses one or more grating light valves (xe2x80x9cGLVxe2x80x9d) to produce an image. GLV""s are known devices, and a description can be found in (among other sources) a paper by D. M. Bloom of Silicon Light Machines, Inc., titled xe2x80x9cThe Grating Light Valve: revolutionizing display technologyxe2x80x9d (1997; available from Silicon Light Machines; and a copy of which has been filed in an Information Disclosure Statement for this application), and in an article (and therein cited references) by R. W. Corrigan and others of Silicon Light Machines, Inc., titled xe2x80x9cAn Alternative Architecture for High Performance Displayxe2x80x9d (presented at the 141st SMPTE Technical Conference and Exhibition, Nov. 20, 1999, in New York, N.Y.), the disclosures of which are incorporated herein by reference. In overview, a GLV uses a combination of reflection and diffraction of light to create an image. A GLV includes a one-dimensional array of GLV pixels, each GLV pixel including a number of microscopic xe2x80x9cribbons.xe2x80x9d The ribbons for each GLV pixel can be deflected through electrostatic force to create an adjustable diffraction grating. In a non-deflected state, the ribbons reflect light. As the ribbons are deflected, the ribbons increasingly diffract light. Accordingly, by controlling the ribbons, the proportion of light that is either reflected or diffracted can be controlled for each GLV pixel. The GLV deflects the ribbons for each GLV pixel according to image data, such as pixel data received from a frame buffer.
An array of GLV pixels can create a column of visible pixels, such as 1088 pixels, typically an entire column at a time. A GLV can be used to create a vertical column of pixels in a high definition resolution image, such as a screen resolution of 1920 pixels horizontally by 1080 pixels vertically (with some of the 1088 pixels left blank or dark). By providing a GLV with pixel data representing columns of pixels in a frame, the GLV can create the frame of pixels, one column at a time, sweeping from left to right. The location of each column of pixels can be controlled external to the GLV array, such as through lenses and an adjustable mirror, rather than moving the GLV itself. A combination of three GLV""s for red, green, and blue can be used to produce a color image.
3. Frame Buffers
FIG. 1A is a representation of a screen 105 as a grid of pixels 110. In FIG. 1A, for simplicity, screen 105 is only 4xc3x974 and so only 16 pixels are shown, but a typical screen has many more pixels. One common screen resolution is high definition (xe2x80x9cHDxe2x80x9d) resolution, where screen resolution indicates the number of pixels in a frame and is typically given as the horizontal resolution (number of pixels in one row) versus the vertical resolution (number of pixels in one column). HD resolution is either 1920xc3x971080 (2,073,600 total pixels per frame) or 1280xc3x97720 (921,600 pixels per frame). Herein, HD resolution refers to 1920xc3x971080.
Returning to FIG. 1A, the pixels 110 are often numbered sequentially for reference. Pixel 0 is typically at the upper left. FIG. 1B is a representation of a memory device 150 implementing a frame buffer as a grid of memory locations 155. Typical memory devices include SDRAM (synchronous dynamic random access memory). The actual memory device used may vary in different devices, but the memory locations for the frame buffer are typically in a contiguous block of locations with sequential addresses. Memory device 150 has a memory location 155 for storing pixel data (e.g., an intensity value) for each pixel 110 of screen 105. In some implementations, pixel data for more than one pixel is stored at each memory location. In many conventional raster-scan systems, pixel data is stored in memory locations adjacent to one another in the same pattern as the pixels on the screen. In FIG. 1B, each memory location 155 is numbered with the number of the pixel (110 from FIG. 1A) corresponding to the pixel data stored in that memory location 155. For example, the pixel at the upper left of the screen is pixel 0 in FIG. 1A and pixel data for pixel 0 is stored in the first memory location in memory device 150, as indicated by the xe2x80x9c0xe2x80x9d in the upper left memory location 155. The second memory location stores pixel data for pixel 1, the fifth memory location stores pixel data for pixel 4, and so on.
4. Pixel Rates
FIG. 2 is a representation of screen resolutions and typical data throughput requirements. FIG. 2 shows four resolutions in respective areas: VGA resolution (640xc3x97480) 205, XGA resolution (1024xc3x97768) 210, SXGA resolution (1280xc3x971024) 215, and HD resolution (1920xc3x971080) 220. The pixel rate for a screen resolution is the number of pixels per second that need to be processed to maintain the screen resolution at a specified refresh rate (i.e., the number of times a complete frame is drawn to the screen per second). While pixel rates vary among implementations, the pixel rates shown in FIG. 2 are representative. These pixel rates are given in megapixels per second (xe2x80x9cMP/Sxe2x80x9d). For example, according to SMPTE 274M-1998 (a specification defining, among other things, pixel rates for resolutions of 1920xc3x971080), for HD resolution 220 the pixel rate is about 150 MP/S @ 60 Hz. FIG. 2 also shows a corresponding approximate data rate in megabytes per second (xe2x80x9cMB/Sxe2x80x9d) for each resolution. The data rate is the number of bytes per second to be processed based on the number of bytes per pixel and the pixel rate. For example, HD resolution 220 has a data rate of 450 MB/S, at 24 bits per pixel (3 bytes). If each pixel has 32 bits of data, the data rate for HD resolution is 660 MB/S. However, the data rate of a typical 32-bit wide SDRAM running at 125 MHz is approximately 500 MB/S. A frame buffer architecture using two 125 MHz SDRAM""s can realize a data rate of approximately 1000 MB/S. Alternatively, a faster SDRAM, such as one running at 150 MHz, can meet 660 MB/S.
5. Frame Buffers Using Parallel Storage in Two Memory Devices
FIG. 3A is a representation of a frame 305 of pixels 310 divided between two memory devices. Frame 305 has only 32 pixels for simplicity, but, as noted above, a typical HD resolution frame has 2,073,600 pixels. FIG. 3B is a representation of a first memory device 350 and FIG. 3C is a representation of a second memory device 375. Each pixel 310 in frame 305 is numbered, starting with pixel 0 in the upper left of frame 305. Even-numbered pixels are stored in first memory device 350 and odd-numbered pixels are stored in second memory device 375. The pixels stored in second memory device 375 are also shaded for clarity in FIGS. 3A and 3C.
FIG. 4 is a block diagram of a typical frame buffer architecture 400 capable of accessing pixel data for two pixels in parallel, supporting the representations shown in FIGS. 3A, 3B, and 3C. For example, frame buffer architecture 400 can be used in a typical scan converter. A video source 405 provides pixel data to a first memory 410 (recall first memory device 350 in FIG. 3B) and to a second memory 415 (recall second memory device 375 in FIG. 3C) in parallel and a video destination 420 retrieves pixel data from first memory 410 and from second memory 415 in parallel. In this implementation, pixel data for each pixel is stored in a separate addressable memory location. Video source 405 receives video data from another source (not shown), such as a broadcast source or a software application running on a computer system connected to video source 405. Video destination 420 controls the display of each pixel on a video device (not shown), such as a CRT. First memory 410 and second memory 415 are separate memory devices such as two SDRAM""s. A first data bus 425 is connected to video source 405, first memory 410, and video destination 420. A second data bus 430 is connected to video source 405, second memory 415, and video destination 420. A source address bus 435 is connected to video source 405 and a first input 440 of an address multiplexor 445. A destination address bus 450 is connected to video destination 420 and a second input 455 of address multiplexor 445. An output 460 of address multiplexor 445 is connected to first memory 410 and second memory 415. Accordingly, the same address is provided to both first memory 410 and second memory 415. Address multiplexor 445 receives a control signal (not shown) to cause first input 440 or second input 455 to connect to output 460. First memory 410 and second memory 415 also receive control signals (not shown) to control whether memories 410 and 415 will read in data (write mode) or read out data (read mode). In addition, while clock lines are not shown in FIG. 4, architecture 400 operates based on clock cycles so that pixel data can be processed for two pixels per clock cycle in support of the desired pixel rate.
In operation, memories 410 and 415 read in or store complementary halves of a frame of pixels as pixel data from video source 405 and output the pixel data to video destination 420. To store pixel data, memories 410 and 415 are put in write mode and address multiplexor 445 is set to connect first input 440 to output 460. Video source 405 provides pixel data for a first pixel to first data bus 425, such as pixel 0 in FIG. 3A, and pixel data for a second pixel to second data bus 430, such as pixel 1 in FIG. 3A. First data bus 425 provides its pixel data to first memory 410 and second data bus 430 provides its pixel data to second memory 415. Video source 405 also provides an address to source address bus 435. To calculate the address, video source 405 can use a counter. Because each memory 410 and 415 stores pixel data for half the pixels in one frame, the counter typically ranges from 0 to one less than one-half of the number of pixels in one frame. Video source 405 can increment the counter by 1 for each pixel pair. Source address bus 435 provides the address to first input 440 of address multiplexor 445. Address multiplexor 445 in turn provides the address to first memory 410 and second memory 415. First memory 410 stores the pixel data on first data bus 425 at the address supplied by address multiplexor 445 from video source 405. Second memory 415 stores the pixel data on second data bus 430 at the same address. Two pixels have been stored in parallel in two memories using the same address. Referring to FIGS. 3A, 3B, and 3C, pixel 0 and pixel 1 are stored at the same time at the same address in first memory device 350 and second memory device 375, respectively. Accordingly, for example, pixel 0 is at address 0 in first memory device 350, pixel 1 is at address 0 in second memory device 375, pixel 2 is at address 1 in first memory device 350, pixel 3 is at address 1 in second memory device 375, and so on.
To retrieve pixel data, memories 410 and 415 are put in read mode and address multiplexor 445 is set to connect second input 455 to output 460. Video destination 420 provides an address to destination address bus 450. Destination address bus 450 provides the address to second input 455 of address multiplexor 445. Address multiplexor 445 in turn provides the address to first memory 410 and second memory 415. First memory 410 provides the pixel data stored at the address supplied by address multiplexor 445 from video destination 415 to first data bus 425. Second memory 415 provides the pixel data stored at the same address to second data bus 430. First data bus 425 provides its pixel data to video destination 420 and second data bus 430 provides its pixel data to video destination 420. Two pixels have been retrieved in parallel from two memories using the same address. Referring to FIGS. 3A, 3B, and 3C, pixel 0 and pixel 1 can be retrieved at the same time using the same address from first memory device 350 and second memory device 375, respectively.
FIG. 5 is a block diagram of another implementation of a dual pixel frame buffer architecture 500. Architecture 500 is similar to architecture 400 of FIG. 4, but a memory controller 545 provides data and addresses to memories 510 and 515. Memory controller 545 receives pixel data from video source 505 to store in memories 510 and 515. Memory controller 545 retrieves pixel data from memories 510 and 515 and provides the pixel data to video destination 520. Memory controller 545 replaces address multiplexor 445. Memory controller 545 receives signals from video source 505 and video destination 520 indicating whether pixel data is to be stored to or retrieved from memories 510 and 515. Memory controller 545 generates addresses and supplies these addresses along with control signals to memories 510 and 515. Accordingly, memory controller 545 controls address generation rather than video source 505 and video destination 520, as compared with architecture 400 of FIG. 4. In addition, as noted above with respect to FIG. 4, architecture 500 operates based on clock cycles so that pixel data can be processed for two pixels per clock cycle in support of the desired pixel rate.
6. Double-buffering
Typical frame buffer architectures often also utilize xe2x80x9cdouble-buffering.xe2x80x9d Double-buffering is a well known technique where the memory address space of a frame buffer is divided into two sections. In some architectures, each section is a separate memory device, and in other architectures one or more devices are each divided into sections. Data from a frame is stored in one section while data from a previously stored frame is read from the other section. Series of reading and writing operations alternate. For example, after storing pixel data for 16 pixels, pixel data for 16 pixels is retrieved. After storing a frame, the sections switch roles. Pixel data for blocks of pixels can be temporarily stored before being sent to memory or after being received from memory in a buffer, such as a FIFO buffer. In architectures 400 and 500 from FIGS. 4 and 5, respectively, FIFO buffers can be included in both the video source and the video destination, or in the memory controller.
7. SDRAM
Various types of memory devices can be used in implementing a frame buffer. One common type of memory used is SDRAM (synchronous dynamic random access memory). The structure and operation of SDRAM is well known. In overview, an SDRAM has a number of addressable memory locations that depends on the total size of the SDRAM and the size of each memory location. Each addressable memory location has a corresponding memory address. For example, an 8 MB (megabyte) SDRAM where each location is 32 bits has 2,097,152 addressable locations, while an 8 MB SDRAM were each location is 8 bits has four times as many addressable locations. FIG. 6A is a representation of 2,097,152 memory locations as a one-dimensional array 605. Memory cells in a typical SDRAM are physically arranged in a two-dimensional grid and so individual cells can be identified using a combination of a row number and a column number. The memory locations within the same row are often collectively referred to as a xe2x80x9cpage.xe2x80x9d FIG. 6B is a representation of 2,097,152 memory locations as a two-dimensional array or grid 650 having X columns and Y rows. In FIG. 6B, grid 650 has 256 columns 655, from 0 to Xxe2x88x921, and 8192 rows or pages 660, from 0 to Yxe2x88x921. Accordingly, the location in row y at column x has address (y*X+x). For example, location 665 (the first location in the last page) has address (X*(Yxe2x88x921)) and location 670 (the last location in the last page) has address (X*Yxe2x88x921). The sizes of the boxes representing locations in FIG. 6C are representative and not to scale, so different size boxes are not different size memory locations (e.g., locations 665 and 670).
An address for a memory cell can be viewed as a combination of a row address and a column address. FIG. 6C is a representation of an address 675 for one memory location out of 2,097,152. Address 675 has 21 bits, with A0 as the lowest order bit. The lower 8 bits, A0 to A7, are a column address 680, ranging from 0 to 255. The upper 13 bits, A8 to A20, are a row or page address 685, ranging from 0 to 8191.
Due to the nature of the construction of SDRAM, an entire page of memory cells is active at a time. Accessing cells within the same page can be accomplished relatively quickly using a series of column addresses without changing the page address. To change pages, a new page address is used and an additional delay is incurred from both the extra address cycle and a delay in the memory changing which page is active. This delay is referred to as a xe2x80x9cpage missxe2x80x9d and can result in a loss in speed. SRAM (static random access memory) typically does not incur the same page miss delay as SDRAM, but SRAM is typically more expensive than SDRAM.
In a conventional frame buffer using SDRAM, pixel data for horizontally neighboring pixels is typically stored in the same page of memory. Referring to FIGS. 1A and 1B, pixel data for pixels 0, 1, 2, and 3 would be stored in one page, pixel data for pixels 4, 5, 6, and 7 would be stored in another page, and so on. In a parallel architecture, such as architecture 400 in FIG. 4, a page stores pixel data for every other horizontally aligned pixel, such as the first page of memory device 350 storing pixel data for pixels 0, 2, 4, and 6 in FIGS. 3A and 3B. Storing and retrieving pixel data can be accomplished quickly with few page misses because pixel data in a conventional raster scan system is processed in row order (left to right, top to bottom) for both storing and retrieving. The pixel data for pixels in different rows are typically not stored in the same page, and so page misses occur when pixel data is to be stored or retrieved for pixels from different rows. For example, retrieving pixel data for pixels 0, 1, 2, and 3 would cause one page miss (the initial page miss in the first access), but retrieving pixel data for pixels 0, 4, 8, and 12 would cause four page misses.
The present disclosure provides methods and apparatus for storing data using two-dimensional arrays mapped to memory locations. In one implementation, a buffer page system includes: a data source, providing data elements in a first order; a data destination, receiving data elements in a second order; at least one memory device, each memory device having a plurality of memory pages including a plurality of memory locations, each memory location having an address; and where each data element corresponds to an entry in one of a plurality of buffer pages, each buffer page having a plurality of entries along a first dimension corresponding to the first order and a plurality of entries along a second dimension corresponding to the second order, and where data elements are stored to the memory device in the first order and retrieved from the memory device in the second order, and where each memory page stores data elements in multiple locations according to the first order and stores data elements in multiple locations according to the second order.
In another implementation, a pixel page system includes: a video source providing pixel data for pixels in a frame, the frame having rows of pixels and columns of pixels; a video destination; a first memory having a plurality of memory locations; a second memory having a plurality of memory locations; a memory controller connected to the first memory and the second memory; a first data bus connected to the memory controller; a second data bus connected to the memory controller; a source address line connected to the video source and the memory controller; a destination address line connected to the video destination and the memory controller; and where each pixel corresponds to an entry in one of a plurality of pixel pages, and a pixel page includes multiple pixels from a row in the frame and multiple pixels from a column in the frame, and where each entry in a pixel page corresponds to a memory location.
In another implementation, a method of storing pixel data includes: storing pixel data for a first pixel in a first page of memory, where the first pixel is a pixel in a frame of pixels, where the frame includes multiple horizontal rows of pixels, and where the first pixel is the leftmost pixel in the first horizontal row of pixels in the frame; storing pixel data for a second pixel in the first page of memory, where the second pixel is a pixel in the first horizontal row of pixels in the frame and is a different pixel than the first pixel; storing pixel data for a third pixel in the first page of memory, where the third pixel is the leftmost pixel in the second horizontal row of pixels in the frame; and storing pixel data for a fourth pixel in a second page of memory, where the fourth pixel is a pixel in the first horizontal row of pixels in the frame and is a different pixel than the first pixel and the second pixel.
In another implementation, a method of retrieving pixel data includes: retrieving pixel data for a first pixel from a first page of memory, where the first pixel is a pixel in a frame of pixels, where the frame includes multiple horizontal rows of pixels, and where the first pixel is the leftmost pixel in the first horizontal row of pixels in the frame; retrieving pixel data for a second pixel from the first page of memory, where the second pixel is the leftmost pixel in the second horizontal row of pixels in the frame; retrieving pixel data for a third pixel from the first page of memory, where the third pixel is a pixel in the first horizontal row of pixels in the frame and is a different pixel than the first pixel; and retrieving pixel data for a fourth pixel from a second page of memory, where the fourth pixel is a pixel in the first horizontal row of pixels in the frame and is a different pixel than the first pixel and the third pixel.